import { FieldParam, FieldTupleParam } from "../main.ts";

export { OpHandler } from "./op-handler.ts";
export { BtHandler } from "./bt-handler.ts";
export { NValueHandler } from "./n-value-handler.ts";
export { ZeroValueHandler } from "./zero-value-handler.ts";

export interface Handler {
  process<T, Extra>(param: FieldParam<T, Extra>, group?: string): string;

  check<T, Extra>(param: FieldParam<T, Extra>): void;

  processTuple<T, Extra>(param: FieldTupleParam<T, Extra>, group?: string): string;

  checkTuple<T, Extra>(param: FieldTupleParam<T, Extra>): void;

  processObj<T, Extra>(obj: object, param: FieldParam<T, Extra>, group?: string): void;

  processObjTuple<T, Extra>(obj: object, param: FieldTupleParam<T, Extra>, group?: string): void;
}
